package com.yuw.producerandconsumer;

public class Consumer implements Runnable {

	// 属性
	// 仓库
	private WarehouseStack whStack;

	// 多线程终止采用外部传入停止参数
	private boolean isStooped;

	// 行为

	@Override
	public void run() {
		// 消费者的业务逻辑处理

		// 消费者负责消费产品
		while (true) {
			// 同步语句块（被加锁对象是仓库）
			synchronized (whStack) {
				// 消费者消费时，判定仓库栈是否为空
				// 如果仓库为空，则当前消费者等待生产生产
				if (whStack.getSize() == 0) {
					try {
						System.out.println("仓库空，消费者进入仓库的等待队列，等待生产者生产之后将其唤醒");
						whStack.wait();
					} catch (InterruptedException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}

				// 消费一个产品
				Product pro = whStack.pop();
				// 输出信息
				System.out.println("消费者消费产品：" + pro.printInfo());

				// 消费者消费了产品，仓库不为空了，则通知生产者可以生产放入产品了
				whStack.notifyAll();
			}
			// 休眠500ms
			try {
				Thread.sleep(500);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

		}

	}

	public Consumer(WarehouseStack whStack) {
		super();
		this.whStack = whStack;
	}

}
